package com.dlyk.service.impl;

import com.dlyk.constant.Constants;
import com.dlyk.mapper.ClueRemarkMapper;
import com.dlyk.model.*;
import com.dlyk.query.ClueRemarkQuery;
import com.dlyk.service.ClueRemarkService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import jakarta.annotation.Resource;
import org.springframework.beans.BeanUtils;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.List;

@Service
public class ClueRemarkServiceImpl implements ClueRemarkService {

    @Resource
    private ClueRemarkMapper clueRemarkMapper;

    /**
     * 添加线索跟踪记录
     */
    @Override
    public int saveClueRemark(ClueRemarkQuery clueRemarkQuery) {

        ClueRemark clueRemark = new ClueRemark();

        // 使用BeanUtils工具将前端传递的参数转成ClueRemark类型
        BeanUtils.copyProperties(clueRemarkQuery, clueRemark);

        // 获取创建者（当前登录用户）
        User loginUser = (User) SecurityContextHolder.getContext().getAuthentication().getPrincipal();

        // 设置创建时间
        clueRemark.setCreateTime(new Date());
        // 设置创建者
        clueRemark.setCreateBy(loginUser.getId());
        // 设置删除状态（0正常，1删除）
        clueRemark.setDeleted(0);

        return clueRemarkMapper.insertSelective(clueRemark);
    }

    /**
     * 根据id查询线索的跟踪记录（分页查询）
     */
    @Override
    public PageInfo<ClueRemark> getClueRemarkListByClueId(Integer clueId, Integer current) {

        // 1、设置PageHelper
        PageHelper.startPage(current, Constants.PAGE_SIZE);

        // 2、查询（传入一个BaseQuery类，用于拼接sql语句）
        List<ClueRemark> clueRemarkList = clueRemarkMapper.selectClueRemarkListByClueId(clueId);

        // 3、封装分页数据到PageInfo
        PageInfo<ClueRemark> clueRemarkPageInfo = new PageInfo<>(clueRemarkList);

        return clueRemarkPageInfo;
    }

    /**
     * 编辑跟踪记录
     */
    @Override
    public int editClueRemark(ClueRemarkQuery clueRemarkQuery) {

        ClueRemark clueRemark = new ClueRemark();

        // 使用BeanUtils工具将ClueRemarkQuery对象的属性复制到ClueRemark对象
        BeanUtils.copyProperties(clueRemarkQuery, clueRemark);

        // 获取编辑者（当前登录用户）
        User loginUser = (User) SecurityContextHolder.getContext().getAuthentication().getPrincipal();

        // 设置编辑时间
        clueRemark.setEditTime(new Date());
        // 设置编辑者
        clueRemark.setEditBy(loginUser.getId());

        return clueRemarkMapper.updateByPrimaryKeySelective(clueRemark);
    }

    /**
     * 删除跟踪记录
     */
    @Override
    public int removeClueRemark(Integer id) {

        // 逻辑删除：不删数据，只是修改一下数据的状态，数据依然还在表中
        // 物理删除：真正的把数据从数据库表中删掉

        // 根据id修改备注的数据状态（修改deleted字段，0表示正常，1表示删除）
        ClueRemark clueRemark = new ClueRemark();
        clueRemark.setId(id);
        clueRemark.setDeleted(1);

        // 保存修改后的数据状态（逻辑删除）
        return clueRemarkMapper.updateByPrimaryKeySelective(clueRemark);
    }

}

